﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid;
using DevExpress.Utils;

using DevExpress.XtraEditors.Repository;

using MM.Business;
using MM.Entities;
namespace MM
{
    public partial class frmChinhsuaPhieuNK : Form
    {
        string _matau = "";
        string _nguoitao = "";
        string _sConn = "";
        string _MaPhieuNhapHang = "";
        List<CHI_TIET_PNH> lst = new List<CHI_TIET_PNH>();
        PHIEU_NHAP_HANG oPNH = new PHIEU_NHAP_HANG();

        public frmChinhsuaPhieuNK(string sConn, string MaPhieuNhapHang)
        {
            InitializeComponent();
            _sConn = sConn;
            _MaPhieuNhapHang = MaPhieuNhapHang;
            _matau = frmDangNhap.objTau._tenTau2KiTu;
            _nguoitao = frmDangNhap.objTaiKhoan._soCMND;
            
            this.InitDMKho(_matau);
            this.HienthiThongtin(_MaPhieuNhapHang);
            
        }

        public frmChinhsuaPhieuNK(string sConn)
        {
            InitializeComponent();
            _sConn = sConn;
        
            _matau = frmDangNhap.objTau._tenTau2KiTu;
            _nguoitao = frmDangNhap.objTaiKhoan._soCMND;

            this.InitDMKho(_matau);

            this.HienthiThongtin(_MaPhieuNhapHang);

        }

        private void InitDMKho(string matau)
        {
            clsKHO khoCtrl = new clsKHO(_sConn);
            List<KHO> lstKho = new List<KHO>();
            lstKho = khoCtrl.LoadKHOByTAU(matau);
            this.lookupKho.DataSource = lstKho;
            this.lookupKho.DisplayMember = "TenKho";
            this.lookupKho.ValueMember = "MaKho";
        }
        private void HienthiThongtin(string MaPhieuNhapHang)
        {
            if (MaPhieuNhapHang == "")
                this.HienthiPHIEU_NHAP_HANG_MAX(_matau);
            else
            // hien thi thong tin 
                this.HienthiPHIEU_NHAP_HANG(MaPhieuNhapHang);
            this.HienthiCHI_TIET_PNH(_MaPhieuNhapHang);
        }

        private void HienthiPHIEU_NHAP_HANG_MAX(string matau)
        {
            clsPHIEU_NHAP_HANG pnhCtrl = new clsPHIEU_NHAP_HANG(_sConn);
            List<PHIEU_NHAP_HANG> lst = new List<PHIEU_NHAP_HANG>();
            lst = pnhCtrl.usp_SelectPHIEU_NHAP_HANG_MAX(matau);
            if (lst.Count > 0)
            {
                oPNH = lst[0];
                this.txtSoPhieuGR.Text = lst[0].MaPhieuNhapHang;
                this.txtSoPhieuPO.Text = lst[0].POThamChieuSAP;
                this.txtNgayThucHien.Text = lst[0].NgayNhap.Day.ToString() + "/" + lst[0].NgayNhap.Month.ToString() + "/" + lst[0].NgayNhap.Year.ToString();
                this.txtNguoiThucHien.Text = lst[0].NguoiNhap;
                _MaPhieuNhapHang = lst[0].MaPhieuNhapHang;
               
                if (lst[0].NgayExport.HasValue)// da duyet
                {
                    this.cmdLuu.Enabled = false;
                    this.chkDaduyet.Checked = true;
                }
                else
                {
                    this.cmdLuu.Enabled = true;
                    this.chkDaduyet.Checked = false;                    
                }                

                if (lst[0].TinhTrang == 1)
                {
                    this.chkXoa.Checked = true;
                }
                else
                    this.chkXoa.Checked = false;
            }

        }

        private void HienthiPHIEU_NHAP_HANG(string MaPhieuNhapHang)
        {
            clsPHIEU_NHAP_HANG pnhCtrl = new clsPHIEU_NHAP_HANG(_sConn);
            List<PHIEU_NHAP_HANG> lst = new List<PHIEU_NHAP_HANG>();
            lst = pnhCtrl.usp_SelectPHIEU_NHAP_HANG(MaPhieuNhapHang);
            if (lst.Count > 0)
            {
                oPNH = lst[0];
                this.txtSoPhieuGR.Text = lst[0].MaPhieuNhapHang;
                this.txtSoPhieuPO.Text = lst[0].POThamChieuSAP;
                this.txtNgayThucHien.Text = lst[0].NgayNhap.Day.ToString() + "/" + lst[0].NgayNhap.Month.ToString() + "/" + lst[0].NgayNhap.Year.ToString();
                this.txtNguoiThucHien.Text = lst[0].NguoiNhap;
                _MaPhieuNhapHang = lst[0].MaPhieuNhapHang;

                if (lst[0].NgayExport.HasValue)// da duyet
                {
                    this.cmdLuu.Enabled = false;
                    this.chkDaduyet.Checked = true;
                }
                else
                {
                    this.cmdLuu.Enabled = true;
                    this.chkDaduyet.Checked = false;
                }

                if (lst[0].TinhTrang == 1)
                {
                    this.chkXoa.Checked = true;
                }
                else
                    this.chkXoa.Checked = false;
            }

        }
        private void HienthiCHI_TIET_PNH(string MaPhieuNhapHang)
        {
            clsCHI_TIET_PNH ctCtrl = new clsCHI_TIET_PNH(_sConn);
            
            lst = ctCtrl.usp_SelectCHI_TIET_PNH_ByMaPhieuNhapHang(MaPhieuNhapHang);
            lst.RemoveAll(delegate(CHI_TIET_PNH x) { return x.TinhTrang == 1; });

            List<CHI_TIET_PNH> lst1 = new List<CHI_TIET_PNH>();
            lst1 = ctCtrl.usp_SelectCHI_TIET_PNH_ByMaPhieuNhapHang(MaPhieuNhapHang);
            lst1.RemoveAll(delegate(CHI_TIET_PNH x) { return x.TinhTrang == 1; });
          
            // neu nhap kho tu PO thi kiem tra so luong con
            int index = -1;
            List<CHI_TIET_PNH> lstctpnh = new List<CHI_TIET_PNH>();
            for (int i = 0; i < lst.Count; i++)
            {
              
                if (lst[i].POThamChieuSAP != "")
                {
                    // dem so luong nhan hang cua cac phieu nhap hang cho cung mot vtpt trong PO

                    lstctpnh.Clear();
                    lstctpnh = ctCtrl.usp_SelectCHI_TIET_PNH_ByMaChiTietPDH(lst[i].MaChiTietPDH);
                    lstctpnh.RemoveAll(delegate(CHI_TIET_PNH x) { return x.TinhTrang == 1; });

                    float sl = 0;
                    for (int j = 0; j < lstctpnh.Count; j++)
                    {
                        sl += lstctpnh[j].SoLuong;
                    }

                    lst[i].SoLuongPOCon = lst[i].SoLuongPO - sl;

                    index = lst1.FindIndex(delegate(CHI_TIET_PNH x) { return x.MaChiTiet == lst[i].MaChiTiet; });
                    if (index>-1)
                    {
                        lst1[index].SoLuongPOCon=lst[i].SoLuongPOCon;
                    }
                }               

                
            }

            


            this.gridControl1.DataSource = lst1;          

        }

        private void txtSoPhieuGR_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                _MaPhieuNhapHang = this.txtSoPhieuGR.Text.Trim();
                if (_MaPhieuNhapHang.Length == 10)
                {
                    this.lst.Clear();
                    this.txtSoPhieuGR.BackColor = Color.White;
                    this.HienthiThongtin(_MaPhieuNhapHang);
                }
                else
                    this.txtSoPhieuGR.BackColor = Color.Red;
            }
        }

        private void cmdLuu_Click(object sender, EventArgs e)
        {
            clsCHI_TIET_PNH ctpnhCtrl = new clsCHI_TIET_PNH(_sConn);
            string makho = "";
            float soluong=-1;
           float soluongcon=0;
           try
           {
               for (int i = 0; i < lst.Count; i++)
               {
                   makho = gridDSVT.GetRowCellValue(i, "MaKho").ToString();
                   soluong = float.Parse(gridDSVT.GetRowCellValue(i, "SoLuong").ToString());
                   soluongcon = float.Parse(gridDSVT.GetRowCellValue(i, "SoLuongPOCon").ToString());

                   #region Yen them vao ngay 18/10/2013
                   if (soluong == 0)
                   {
                       MessageBox.Show("KHÔNG ĐƯỢC CẬP NHẬT SỐ LƯỢNG = 0. VUI LÒNG BẤM NÚT XÓA TẠI DÒNG CÓ VTPT CẦN XÓA");
                       break;
                   }
                   #endregion Yen them vao ngay 18/10/2013

                   if (makho != lst[i].MaKho || soluong != lst[i].SoLuong)
                   {
                       if (soluong <= soluongcon + lst[i].SoLuong) // so luong cap nhat phai <= so luong PNH + so luong PO con
                       {

                           CHI_TIET_PNH obj = new CHI_TIET_PNH();
                           obj = lst[i];
                           obj.MaKho = makho;
                           obj.SoLuong = soluong;
                           obj.NgayNhap = DateTime.Today;
                           obj.NguoiNhap = _nguoitao;



                           if (ctpnhCtrl.usp_UpdateCHI_TIET_PNH(obj) > 0)
                           {                               
                               lst[i].MaKho = makho;
                               lst[i].SoLuong = soluong;                               
                           }
                           else
                           {                               

                               int j = i + 1;
                               MessageBox.Show("CẬP NHẬT KHÔNG THÀNH CÔNG CHO VTPT: " + lst[i].MaVTPT + " TẠI DÒNG THỨ " + j.ToString());
                           }
                       }
                       else
                       {
                           int j = i + 1;
                           MessageBox.Show("CẬP NHẬT KHÔNG THÀNH CÔNG CHO VTPT: " + lst[i].MaVTPT + " TẠI DÒNG THỨ " + j.ToString() + "\nSỐ LƯỢNG NHẬP VƯỢT CHO PHÉP");
                       }

                   }
               }
               this.HienthiCHI_TIET_PNH(_MaPhieuNhapHang);
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message);
           }
        }

        private void frmChinhsuaPhieuNK_Paint(object sender, PaintEventArgs e)
        {
            //Common.PaintGradientColor(Color.LightYellow, Color.LightSkyBlue, System.Drawing.Drawing2D.LinearGradientMode.Vertical, this.Width, this.Height, this);            
        }

        private void label1_Click(object sender, EventArgs e)
        {
            frmTimPhieuNK f = new frmTimPhieuNK(_sConn);
            f.chonPNK += new frmTimPhieuNK.ChonPhieuNhapKho(GetPhieuNhapKho);
            f.Show(this);
        }

        private void GetPhieuNhapKho(object sender, ChonPhieuNKEventArgs e)
        {
            string mapnk = e.MaPhieuNhapKho;
            this.HienthiThongtin(mapnk);
            
        }

        private void frmChinhsuaPhieuNK_Load(object sender, EventArgs e)
        {
            this.HienthiThongtin(_MaPhieuNhapHang);
            Common.SetColor(this);
        }

        private void lnkXoa_Click(object sender, EventArgs e)
        {
            try
            {
                
                int MaChiTiet = int.Parse(gridDSVT.GetRowCellValue(gridDSVT.FocusedRowHandle, "MaChiTiet").ToString());
                if (MaChiTiet > 0 && this.chkDaduyet.Checked == false) // danh dau xoa trong CSDL // ngay 02122013 thêm đk this.chkDaduyet.Checked==false
                {
                    if (MessageBox.Show("Bạn có thật sự muốn Xóa ?", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        CHI_TIET_PNH obj = new CHI_TIET_PNH();
                        obj = lst[gridDSVT.FocusedRowHandle];
                        obj.TinhTrang = 1;
                        obj.NgayNhap = DateTime.Today;
                        obj.NguoiNhap = _nguoitao;

                        clsCHI_TIET_PNH ctpnhCtrl = new clsCHI_TIET_PNH(_sConn);
                        if (ctpnhCtrl.usp_UpdateCHI_TIET_PNH(obj) > 0)
                        {
                            lst.RemoveAt(gridDSVT.FocusedRowHandle);
                            gridDSVT.DeleteRow(gridDSVT.FocusedRowHandle);
                            this.gridControl1.RefreshDataSource();

                            if (lst.Count == 0) // xoa ca phieu
                            {
                                clsPHIEU_NHAP_HANG pnhCtrl = new clsPHIEU_NHAP_HANG(_sConn);
                                oPNH.TinhTrang = 1;
                                oPNH.NgayNhap = DateTime.Today;
                                oPNH.NguoiNhap = _nguoitao;
                                pnhCtrl.usp_UpdatePHIEU_NHAP_HANG_Xoa(oPNH);

                                this.HienthiThongtin(this.txtSoPhieuGR.Text);
                            }
                        }
                        else
                            MessageBox.Show("XÓA KHÔNG THÀNH CÔNG");
                    }
                }

            }
            catch { }
        }

       
    }
}